#include "test/test.h"


#define DISP_BUF_SIZE (480 * 1024)

int main(void)
{
    /* LVGL初始化 */
    lv_init();

    /* 显示设备初始化及注册 */
    fbdev_init();
    static lv_color_t buf[DISP_BUF_SIZE];
    static lv_disp_draw_buf_t disp_buf;
    lv_disp_draw_buf_init(&disp_buf, buf, NULL, DISP_BUF_SIZE);
    
    static lv_disp_drv_t disp_drv;
    lv_disp_drv_init(&disp_drv);
    disp_drv.draw_buf   = &disp_buf;
    disp_drv.flush_cb   = fbdev_flush;
    disp_drv.hor_res    = 800;
    disp_drv.ver_res    = 480;
    lv_disp_drv_register(&disp_drv);

    /* 输入设备初始化及注册 */
    evdev_init();
    static lv_indev_drv_t indev_drv_1;
    lv_indev_drv_init(&indev_drv_1);
    indev_drv_1.type = LV_INDEV_TYPE_POINTER;
    indev_drv_1.read_cb = evdev_read;
    lv_indev_drv_register(&indev_drv_1);

    // lv_indev_t *mouse_indev = lv_indev_drv_register(&indev_drv_1);

    // /* 创建四个角的按钮 */
    // create_four_corner_buttons();

    // // 显示图片按钮
    // test_btn_image();
    
    // // 显示标签
    // label();
    // // 滚动标签
    // lv_bling_label_3();

    // // gif 图片展示
    // lv_bling_gif_1();
    
    // // 信息框
    // lv_bling_msgbox_1();

    // // 列表控件
    // lv_bling_list_1();

    // //keys键盘
    // lv_example_keyboard_5();

    // //styleSheet样式
    // lv_bling_stylesheet_1();
    // my_example_style_2();  // 设置渐变色
    // my_example_style_9();  // 设置阴影

    // // 中文字体
    // font_test_2();
    // font_test_1();
    
    // // 双定时器函数
    // timer_button_test();

    //登录系统
    login_system();

    // // squ组件
    // ui_init();

    /* 主循环：事务处理及节拍更新 */
    while(1) {
        lv_timer_handler();  // 事务处理
        lv_tick_inc(5);     // 节拍累计
        usleep(5000);
    }

    return 0;
}

/* 用户节拍获取函数 */
uint32_t custom_tick_get(void)
{
    static uint64_t start_ms = 0;
    if(start_ms == 0) {
        struct timeval tv_start;
        gettimeofday(&tv_start, NULL);
        start_ms = (tv_start.tv_sec * 1000000 + tv_start.tv_usec) / 1000;
    }

    struct timeval tv_now;
    gettimeofday(&tv_now, NULL);
    uint64_t now_ms;
    now_ms = (tv_now.tv_sec * 1000000 + tv_now.tv_usec) / 1000;

    uint32_t time_ms = now_ms - start_ms;
    return time_ms;
}